-- 实现lua脚本层间进程通讯的序列化工具
local msgpack = require "messagepack"



-- 打包函数，参数格式 "AAA:sumFunc",{a,b,c}
function Send_data(name, params)
    -- 1.进行类型检查
    if type(name) ~= "string" or type(params)~="table" then
        assert(false, "RPC的Send_data尝试发送一个非法参数的包")
    end

    -- 2.进行name的参数检查
    local idx = string.find(name, ":")
    if not idx then
        assert(false, "RPC的Send_data尝试发送一个没有冒号分隔的包")
    end
    if string.sub(name, -1) == ":" then
        assert(false, "RPC的Send_data尝试发送一个没有函数名的包")
    end

    -- 3.打包完整数据（自动处理所有Lua类型）
    local data = msgpack.pack({
        name = name, -- 第一个参数必须是字符串
        params = params  -- 第二个参数必须是表，可以嵌套
    })

    -- 4.调用C++传输函数进行后续传递
    _c_logic_send(data)
end

-- 解包函数（以确认参数合法）
function Receve_data(name, params_table)
    -- 根据参数分发到对应的模块处理
    local idx = string.find(name, ":")
    local modueName = string.sub(name, 1, idx - 1)
    local funcName = string.sub(name, idx + 1, -1)
    
    -- 进行模块分发
end

----------------暴露给C++层的ipc回调函数开始----------------
-- 用于logic进程间通信
function _l_logic_receve(name, params_table)
    -- 进行初步检查是否类型合法
    if type(name) ~= "string" or type(params_table)~="table" then
        assert(false, "_l_logic_receve收到一个非法RPC调用: %s", tostring(name))
    end
    Receve_data(name, params_table)
end

-- 用于与db通信

-- 用于与log通信


----------------暴露给C++层的ipc回调函数结束----------------